// Copyright (c) MatrixFramework. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.

using System.ComponentModel.DataAnnotations;

namespace PhotoGalleryService.Photos;

/// <summary>
/// 创建更新照片数据传输对象
/// </summary>
public class CreateUpdatePhotoDto
{
    /// <summary>
    /// 文件名
    /// </summary>
    [Required]
    [StringLength(255)]
    public string FileName { get; set; } = string.Empty;

    /// <summary>
    /// 原始文件名
    /// </summary>
    [Required]
    [StringLength(500)]
    public string OriginalFileName { get; set; } = string.Empty;

    /// <summary>
    /// 文件路径
    /// </summary>
    [Required]
    [StringLength(1000)]
    public string FilePath { get; set; } = string.Empty;

    /// <summary>
    /// 文件大小（字节）
    /// </summary>
    [Required]
    public long FileSize { get; set; }

    /// <summary>
    /// MIME类型
    /// </summary>
    [Required]
    [StringLength(100)]
    public string MimeType { get; set; } = string.Empty;

    /// <summary>
    /// 文件哈希值
    /// </summary>
    [Required]
    [StringLength(64)]
    public string FileHash { get; set; } = string.Empty;

    /// <summary>
    /// 照片标题
    /// </summary>
    [StringLength(500)]
    public string? Title { get; set; }

    /// <summary>
    /// 照片描述
    /// </summary>
    [StringLength(2000)]
    public string? Description { get; set; }

    /// <summary>
    /// 拍摄时间
    /// </summary>
    public DateTime? TakenAt { get; set; }

    /// <summary>
    /// 纬度
    /// </summary>
    public double? Latitude { get; set; }

    /// <summary>
    /// 经度
    /// </summary>
    public double? Longitude { get; set; }

    /// <summary>
    /// 位置描述
    /// </summary>
    [StringLength(500)]
    public string? Location { get; set; }

    /// <summary>
    /// 相机型号
    /// </summary>
    [StringLength(200)]
    public string? CameraModel { get; set; }

    /// <summary>
    /// 照片宽度
    /// </summary>
    public int? Width { get; set; }

    /// <summary>
    /// 照片高度
    /// </summary>
    public int? Height { get; set; }

    /// <summary>
    /// 是否公开
    /// </summary>
    public bool IsPublic { get; set; }

    /// <summary>
    /// 标签
    /// </summary>
    [StringLength(1000)]
    public string? Tags { get; set; }

    /// <summary>
    /// 缩略图路径
    /// </summary>
    [StringLength(1000)]
    public string? ThumbnailPath { get; set; }

    /// <summary>
    /// 中等尺寸图片路径
    /// </summary>
    [StringLength(1000)]
    public string? MediumPath { get; set; }
}